// 运行时配置
import React from 'react';
import { useModel, history } from '@umijs/max';
import { tokenManager, apiClients } from '@/services/apiClient';
import { autoLoginInDev } from '@/utils/autoLogin';
import RightContent from '@/components/RightContent';
import { usePermissionStore } from '@/stores/permissionStore';

// 包装组件，用于在布局中获取全局状态
const RightContentWrapper: React.FC = () => {
  const { initialState } = useModel('@@initialState');
  console.log('RightContentWrapper initialState:', initialState);
  
  if (initialState?.currentUser) {
    return <RightContent currentUser={initialState.currentUser} />;
  } else {
    return (
      <div style={{ padding: '0 16px' }}>
        <a href="/user/login" style={{ color: '#1890ff' }}>登录</a>
      </div>
    );
  }
};

// 全局初始化数据配置，用于 Layout 用户信息和权限初始化
// 更多信息见文档：https://umijs.org/docs/api/runtime-config#getinitialstate
export async function getInitialState(): Promise<{
  name: string;
  currentUser?: any;
}> {
  console.log('getInitialState 开始执行');

  try {
    // 开发环境自动登录
    if (process.env.NODE_ENV === 'development') {
      console.log('开发环境，尝试自动登录...');
      await autoLoginInDev();
      
      // 检查Token
      const token = tokenManager.getToken();
      console.log('Token状态:', token ? '存在' : '不存在');
      
      if (token) {
        console.log('开始获取用户信息...');
        const userInfo = await apiClients.users.usersProfileRetrieve();
        console.log('获取到用户信息:', userInfo);

        // 初始化权限数据 - 必须在返回用户信息之前完成
        console.log('开始初始化权限数据...');
        try {
          const permissionStore = usePermissionStore.getState();

          // 同步等待权限数据加载完成
          await Promise.all([
            permissionStore.loadPermissions(),
            permissionStore.loadRoles()
          ]);

          // 验证权限数据是否加载成功
          const { permissions, roles } = usePermissionStore.getState();
          console.log('权限数据初始化完成:', {
            permissionsCount: permissions.length,
            rolesCount: roles.length,
            permissions: permissions.slice(0, 5), // 显示前5个权限
            roles: roles.slice(0, 3) // 显示前3个角色
          });

        } catch (error) {
          console.error('权限数据初始化失败:', error);
          // 即使权限加载失败，也要继续返回用户信息
        }

        const result = {
          name: '运维平台',
          currentUser: userInfo.data || userInfo
        };
        console.log('getInitialState 返回结果:', result);
        return result;
      }
    }
    
    // 没有Token的情况
    const result = { name: '运维平台' };
    console.log('getInitialState 返回默认结果:', result);
    return result;
    
  } catch (error) {
    console.error('getInitialState 执行失败:', error);
    tokenManager.clearToken();
    
    const result = { name: '运维平台' };
    console.log('getInitialState 返回错误恢复结果:', result);
    return result;
  }
}

export const layout = () => {
  return {
    logo: 'https://img.alicdn.com/tfs/TB1YHEpwUT1gK0jSZFhXXaAtVXa-28-27.svg',
    menu: {
      locale: false,
    },
    rightContentRender: () => {
      // 右上角显示用户信息和登出按钮 - 使用JSX语法
      return <RightContentWrapper />;
    },
    onMenuHeaderClick: () => {
      // 点击logo的处理 - 使用路由导航避免页面抖动
      history.push('/');
    },
  };
};
